package cc.geguol.iodemo.bufferinputstream;

import java.io.IOException;
import java.io.InputStream;

/**
 * 作者：13687
 * 日期：2017/6/17
 * 项目：IODemo
 * 描述：带缓冲的字节流
 * 其实可以不使用该对象，直接使用FileInputStream,并且自己定义缓冲区
 *
 */
public class MybufferStream {
	public MybufferStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	private InputStream inputStream;
	private byte[] buff = new byte[1024];// 自己定义一个缓冲区
	/**
	 * 1. 如果缓冲区的字节被取完，那么就重新装满缓冲区
	 * 2. 如果没有取完就重缓冲区中取
	 * 3. 定义指针和计数器
	 * */
	// 每次只读一个byte,这里返回int 也是因为write 方法对应的是int
	// 这里byte 会被提升成int
	private int count = 0,pos = 0;
	public int read() throws IOException {
		if (count==0){
			pos = 0;
			count = inputStream.read(buff);
			if (count==-1) return -1;
			byte b = buff[pos];
			count --;
			pos++;
			// 如果遇到 字节1111-1111 直接提升会转成 -1
			return b&0xFF;
		}else if (count>0){
			byte b = buff[pos];
			count--;
			pos++;
			return b&0xFF;
		}else {
			return -1;
		}
	}

	public void close() throws IOException {
		inputStream.close();
	}
}
